// pages/release-task/release-task.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    title: '', // 活动标题
    selectedTime: '', // 活动日期
    selectedData: '', // 活动时间
    location: '', // 活动地点
    topic: '', // 活动话题
    detail: '', // 活动详情
    publisher: '', // 发布人员
    picture: '', // 活动图片
    errors: {}, // 存储错误信息
    user_id: '', // 发布用户的id
    tempFilePath: "",
  },
  onDataChange(event) {
    const selectedData = event.detail.value; // 获取选择的时间
    this.setData({
      selectedData: selectedData
    }, () => {
      this.validateForm()
    });
  },
  onTimeChange(event) {
    const selectedTime = event.detail.value; // 获取选择的时间
    this.setData({
      selectedTime: selectedTime
    }, () => {
      this.validateForm()
    });
  },
  // 活动标题输入框变化事件
  onTitleChange(e) {
    const title_string = e.detail.value
    this.setData({
      title: title_string
    }, () => {
      this.validateForm()
    });
  },

  // 活动地点输入框变化事件
  onLocationChange(e) {
    this.setData({
      location: e.detail.value
    }, () => {
      this.validateForm()
    });
    console.log(e.detail.value)
  },

  // 活动话题输入框变化事件
  onTopicChange(e) {
    const topic_string = e.detail.value
    // const topic_arr = title_string.split("#")
    // const topic = title_arr.join(" ")
    // this.setData({
    //   topic
    // });
    this.setData({
      topic: topic_string
    }, () => {
      this.validateForm()
    });
    // console.log(title_string,title_arr,topic)
  },

  // 活动详情输入框变化事件
  onDetailChange(e) {
    this.setData({
      detail: e.detail.value
    }, () => {
      this.validateForm()
    });
  },

  // 发布人员输入框变化事件
  onPublisherChange(e) {
    this.setData({
      publisher: e.detail.value
    }, () => {
      this.validateForm()
    });
  },

  // 重置表单
  reset() {
    this.setData({
      title: '',
      selectedTime: '',
      selectedData: '',
      location: '',
      topic: '',
      detail: '',
      publisher: '',
      errors: {},
      picture: ''
    });
    if (this.data.picture) {
      this.delete()
    }
  },
  // 表单验证函数封装-errors填充
  validateForm() {
    const {
      title,
      selectedTime,
      selectedData,
      location,
      topic,
      detail,
      publisher,
      picture
    } = this.data;
    const errors = {};

    // 验证活动标题
    if (!title) {
      errors.title = '活动标题不能为空';
    }

    // 验证活动时间
    if (!selectedTime) {
      errors.selectedTime = '请选择活动时间';
    }

    // 验证活动日期
    if (!selectedData) {
      errors.selectedData = '请选择活动日期';
    }

    // 验证活动地点
    if (!location) {
      errors.location = '活动地点不能为空';
    }

    // 验证活动话题
    if (!topic) {
      errors.topic = '活动话题不能为空';
    }

    // 验证活动详情
    if (!detail) {
      errors.detail = '活动详情不能为空';
    }

    // 验证发布人员
    if (!publisher) {
      errors.publisher = '发布人员不能为空';
    }

    // 验证图片上传
    if (!picture) {
      errors.picture = '上传图片不能为空'
    }
    // 更新错误信息
    this.setData({
      errors
    });

    // 返回验证结果
    return Object.keys(errors).length === 0; // 如果没有错误，返回 true
  },
  // 从内存中取出用户登录时的id
  getUserId() {
    wx.getStorage({
      key: 'user_id',
      success: (res) => {
        console.log(res)
        if (res.data) {
          const user_id = res.data
          this.setData({
            user_id
          })
        } else {
          wx.showToast({
            title: '您当前还未登录',
          })
        }
      }
    })
  },
  // 向数据库发送添加活动的方法
  // 发布活动
  go_navigation() {
    if (this.data.user_id) {
      // 验证表单
      if (this.validateForm()) {
        // 验证通过，执行提交逻辑
        // 1.首先将提交的地址内容转为坐标
        wx.request({
          // https://apis.map.qq.com/ws/geocoder/v1/
          url: 'https://apis.map.qq.com/ws/geocoder/v1/',
          data: {
            address: this.data.location,
            key: 'GDOBZ-2LLCW-Z26RL-3PJU4-MRYCK-N4BOP' // 替换为你的腾讯地图Key
          },
          success: (res) => {
            console.log('数据请求成功', res.data)
            const latitude = res.data.result.location.lat;
            const longitude = res.data.result.location.lng;
            // 处理话题
            const topic_string = this.data.topic
            const topic_arr = topic_string.split("#")
            const topic = topic_arr.join(" ")
            // 处理时间日期
            const datatime = `${this.data.selectedData} ${this.data.selectedTime}`
            wx.cloud.database().collection("actives").add({
              data: {
                // 湖北省宜昌市点军区桥边镇科谷技工学校操场
                name: this.data.title,
                time: datatime,
                location: this.data.location,
                detail: this.data.detail,
                talk: topic,
                latitude: latitude,
                longitude: longitude,
                pic: this.data.picture,
                publisher: this.data.publisher,
                publisher_id: this.data.user_id
              },
              success: (res) => {
                console.log('添加数据库请求成功', res)
                // this.reset();
                wx.switchTab({
                  url: '/pages/home/home',
                })
                wx.showToast({
                  title: '提交成功',
                  icon: 'success',
                });
              },
              fail(err) {
                console.log("数据添加请求失败：", err)
              }
            })
          },
          fail(err) {
            console.log("数据添加请求失败：", err)
            wx.showToast({
              title: '地址格式错误',
              icon: "error"
            })
          }
        })
        // 这里可以调用 API 提交数据
      } else {
        // 验证失败，显示错误提示
        wx.showToast({
          title: '请填写完整信息',
          icon: 'none',
          duration: 2000
        });
      }
    } else {
      wx.showToast({
        title: '您当前还未登录',
        icon: 'error'
      })
    }
  },
  // 上传图片的方法
  upload_img() {
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      success: chooseResult => {
        // 显示加载提示
        wx.showLoading({
          title: '上传中...',
          mask:true,
        });
        const tempFilePath = chooseResult.tempFiles[0].tempFilePath;
        // 上传到云存储
        wx.cloud.uploadFile({
          cloudPath: `images/${Date.now()}.png`, // 指定上传到的云路径（可以自定义路径和文件名）
          filePath: tempFilePath,
          success: res => {
            // 同时保存 fileID 和临时链接
            const fileID = res.fileID;
            wx.cloud.getTempFileURL({
              fileList: [fileID],
              success: tempRes => {
                this.setData({
                  picture: tempRes.fileList[0].tempFileURL,
                  cloudFileID: fileID // 新增存储文件ID
                });
                wx.hideLoading();
                wx.showToast({
                  title: '图片上传成功',
                  icon: 'success'
                });
                console.log(tempRes, tempRes.fileList[0].tempFileURL)
              }
            });
          },
          fail: err => {
            wx.hideLoading();
            wx.showToast({
              title: '图片上传失败',
              icon: 'error'
            });
            console.error('上传失败', err);
          }
        });
      }
    });
  },

  // 删除图片方法（含云存储清理）
  delete() {
    if (!this.data.cloudFileID) {
      return this.setData({
        picture: ''
      });
    }

    wx.showLoading({
      title: '图片删除中...'
    });

    // 删除云存储文件
    wx.cloud.deleteFile({
      fileList: [this.data.cloudFileID],
      success: res => {
        console.log('云文件删除成功', res);
        this.setData({
          picture: '',
          cloudFileID: null
        });
        wx.hideLoading();
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        });
      },
      fail: err => {
        console.error('云文件删除失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '删除失败',
          icon: 'error'
        });
        // 即使云文件删除失败，仍然清除本地显示
        this.setData({
          picture: ''
        });
      }
    });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 进入页面时显示加载提示
    wx.showLoading({
      title: '加载中...',
      // mask: true // 可选：添加遮罩层防止误操作
      // duration: 2000 // 可选，设置加载时长
    });
    wx.setNavigationBarTitle({
      title: '发布活动',
    })
    // 检查是否登录了？
    this.getUserId()
    this.setData({
      title: '', // 活动标题
      selectedTime: '', // 活动日期
      selectedData: '', // 活动时间
      location: '', // 活动地点
      topic: '', // 活动话题
      detail: '', // 活动详情
      publisher: '', // 发布人员
      picture: '', // 活动图片
      errors: {}, // 存储错误信息
    }, () => {
      wx.hideLoading()
    })
  },
  onReady() {
    console.log('页面初次渲染完成');
  }
})